package com.cskaoyan.javase.oop2._1extends._7initialization._4super;

/**
 * 你完全可以直接把super关键字，看成指向当前类的父类"对象"的一个引用。
 * 即：
 * this代表当前类的当前对象。
 * super表示当前类的父类对象。
 *
 * super和this的使用几乎没有差别，只不过一个表示子类对象，一个表示父类对象。
 * 在子类中的以下结构中都可以使用:
 *      a.成员方法
 *      b.构造器
 *      c.构造代码块
 *
 * 比较大的区别是：
 *      1,super只能访问父类中有的成员，特殊情况下，当父子类具有同名成员时，可以用super区分。
 *      2,this在当前类中不受访问权限控制，super访问父类成员，受访问权限控制。
 *      3.this毕竟还是一个引用，指向当前对象，所以可以直接在类中成员方法中输出它。
 *          但是super毕竟没有指向对象，无法直接输出它！
 *
 * @since 10:43
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a);
        a.test();
    }
}

class AFather {
    // static public int var;
    int num;
}

class A extends AFather {
    int var;
    int num;

    public void test() {
        // super没有真的指向一个对象,不是一个真正的引用,不能直接输出
        // System.out.println(super);
        System.out.println(this);
        System.out.println(this.var);
        System.out.println(var);
        System.out.println(super.num);
        System.out.println(num);
    }

    public void test2(int num) {
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}